home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / clp.exe / CLPDEMO.PAS < prev    next >
Pascal/Delphi Source File  |  1992-09-07  |  7KB  |  228 lines

  1. { ========================================================================= }
  2. { PROGRAM: CLPDemo.Exe - CLParser Demo Program                              }
  3. { ========================================================================= }
  4. {                                                                           }
  5. {                                                                           }
  6. {          !!! ! !!!     !!!!!!                                             }
  7. {         !   !!  !       !    !  Command Line Parser Unit v3.1             }
  8. {        !     !  !       !    !                                            }
  9. {        !        !       !    !  !!!!   !! !!!  !!!!!  !!!!  !! !!!        }
  10. {        !        !       !    !      !   !!  ! !    ! !    !  !!  !        }
  11. {        !        !       !!!!!   !!!!!   !      !!    !!!!!!  !            }
  12. {        !     !  !       !      !    !   !        !!  !       !            }
  13. {         !   !   !    !  !      !    !   !     !    ! !    !  !            }
  14. {          !!!   !!!!!!! !!!      !!!! ! !!!    !!!!!   !!!!  !!!           }
  15. {                                                                           }
  16. {                   Copyright (c) 1991, Greg L. Truesdell                   }
  17. {                            All Rights Reserved                            }
  18. {                                                                           }
  19. { ========================================================================= }
  20. Program ClpDemo_v2;
  21.  
  22. Uses
  23.     DOS, CLParser;
  24.  
  25. Const
  26.     { NormalChars : Set of Char = [#32..#127];   } { defined in CLParser }
  27.     { Switches    : Set of Char = ['/','-','+']; } { defined in CLParser }
  28.     SpecialChars  : Set of Char = ['_','&'];
  29.  
  30. Var
  31.     { object pointers }
  32.     pArg, pSw   : pArgument;    { arguments / switches }
  33.     pW          : pWild;        { wild card list }
  34.     pF          : pPFile;       { parameter file }
  35.     pEnv        : pEnviron;     { environment list }
  36.  
  37. { ========================================================================= }
  38. {                          D I S P L A Y   L I S T                          }
  39. { ========================================================================= }
  40. Procedure DisplayList ( ListObject : pArgument; Message: String );
  41. var
  42.     i       : Integer;
  43.     ta      : String;
  44.     Add_OK  : Boolean;
  45.  
  46. begin
  47.  
  48.     { exit if no items in the list }
  49.  
  50.     if ListObject^.Count = 0 then
  51.         EXIT;
  52.  
  53.     { write a header for the list }
  54.  
  55.     WriteLn;
  56.     WriteLn( Message+':' );
  57.     WriteLn( 'Item# Position# Item' );
  58.     WriteLn( '----- --------- ---------------------------------------' );
  59.  
  60.     Add_OK := ListObject^.Add( 'End of '+Message,0 );
  61.  
  62.     for i := 1 to ListObject^.Count do
  63.     begin
  64.  
  65.         ta := ListObject^.Next;
  66.         WriteLn( i:5, ListObject^.Position:10, ' ', ta );
  67.  
  68.     end;
  69.  
  70.     { report if the list was overflowed }
  71.  
  72.     if ListObject^.Overflow then Writeln('Overflow!');
  73.  
  74.     { let us know if the add was not successful }
  75.  
  76.     if not Add_OK then WriteLn( 'Couldn''t add comment!' );
  77.  
  78. end;
  79.  
  80. { ========================================================================= }
  81. {                               D O   D E M O                               }
  82. { ========================================================================= }
  83. Procedure Do_Demo;
  84. var
  85.     ta : String;
  86.  
  87. begin
  88.  
  89.     { display the primary lists }
  90.  
  91.     DisplayList( pArg, 'Argument List'   );
  92.     DisplayList( pSw,  'Switch List'     );
  93.     DisplayList( pEnv, 'Environment List');
  94.  
  95.     { search for a specific item in a list }
  96.  
  97.     if pEnv^.Find('Path=') <> '' then
  98.     begin
  99.  
  100.         WriteLn;
  101.         WriteLn('Found PATH Environment Variable ---');
  102.         WriteLn('      ', pEnv^.Find('path=') );
  103.  
  104.     end;
  105.  
  106.     { Release the current switch list and parse for special switches }
  107.  
  108.     pSw^.Done;
  109.     pSw^.Init( SpecialChars );
  110.     DisplayList( pSw, 'Special List');
  111.  
  112.     { get the volume id }
  113.  
  114.     pW := New( pWild, Init('\*.*',VolumeID));
  115.  
  116.     { if found, display it }
  117.  
  118.     if pW^.Count > 0 then
  119.     begin
  120.  
  121.         ta := pW^.Next;
  122.  
  123.         Delete(ta,9,1);     { delete the "." in the filename }
  124.  
  125.         WriteLn;
  126.         WriteLn('Volume ID: ', ta);
  127.  
  128.     end;
  129.  
  130.     { check for _f= switch for file mask ( ie. CLPDEMO _F=*.PAS )}
  131.     { if it is there, use it }
  132.  
  133.     ta := pSw^.Find('_f');
  134.  
  135.     if ta <> ''
  136.         then ta := copy(ta,4,length(ta)-3)  { get just the mask }
  137.         else ta := '*.*';                   { otherwise assume all files }
  138.  
  139.     { clear the current wild list and parse for new list }
  140.     { fill the list with matching files (not directories or the volume id }
  141.  
  142.     pW^.Done;
  143.     pW^.Init(ta,AnyFile-Directory-VolumeID);
  144.  
  145.     { display the new list }
  146.  
  147.     DisplayList( pW, 'Wildcard List ('+ ta + ')');
  148.  
  149.     { erase the current wild list and parse for directories }
  150.  
  151.     pW^.Done;
  152.     pW^.Init( ta, Directory );
  153.  
  154.     DisplayList( pW, 'Directory List ('+ ta + ')');
  155.     DisplayList( pF, 'Parameter File List (CLPDEMO.DAT)');
  156.  
  157. end;
  158.  
  159. { ========================================================================= }
  160. {                      I N I T I A L I Z E   L I S T S                      }
  161. { ========================================================================= }
  162. {                                                                           }
  163. {    This procedure initializes the argument list to exclude arguments      }
  164. {    starting with special characters. These special characters will be     }
  165. {    used later as switch indicators.                                       }
  166. {                                                                           }
  167. {    The demo parameter file is loaded into the file list. (CLPDEMO.DAT)    }
  168. {                                                                           }
  169. { ========================================================================= }
  170. Procedure Initialize_Lists;
  171. begin
  172.  
  173.     { parse for arguments - switches - specials }
  174.  
  175.     pArg := New( pArgument, Init( NormalChars-Switches-SpecialChars ) );
  176.  
  177.     { parse for switches }
  178.  
  179.     pSw  := New( pArgument, Init(Switches) );
  180.  
  181.     { fill the environ list }
  182.  
  183.     pEnv := New( pEnviron, Init );
  184.  
  185.     { fill the parameter file list }
  186.  
  187.     pF := New( pPFile, Init( 'CLPDEMO.DAT', [';','*'] ) );
  188.  
  189. end;
  190.  
  191. { ========================================================================= }
  192. {                           E R A S E   L I S T S                           }
  193. { ========================================================================= }
  194. Procedure Erase_Lists;
  195. begin
  196.  
  197.     Dispose( pSw, Done );
  198.     Dispose( pArg, Done );
  199.     Dispose( pEnv, Done );
  200.     Dispose( pW, Done );
  201.     Dispose( pF, Done );
  202.  
  203. end;
  204.  
  205.  
  206. { ========================================================================= }
  207. {                                  M A I N                                  }
  208. { ========================================================================= }
  209. Begin
  210.  
  211.     { turn redirection on }
  212.  
  213.     Assign(Output, '');  Rewrite(Output);
  214.     Assign(Input, '');   Reset(Input);
  215.  
  216.     Initialize_Lists;
  217.  
  218.     Do_Demo;
  219.  
  220.     Erase_Lists;
  221.  
  222. End.
  223.  
  224. { ========================================================================= }
  225. {                                   E O F                                   }
  226. { ========================================================================= }
  227.  
  228.